home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Misc / bgui / Examples / Source / BarDemo.c < prev    next >
C/C++ Source or Header  |  2000-05-09  |  8KB  |  283 lines

  1. /*
  2.  * @(#) $Header: /cvsroot/bgui/gadgets/Bar/BarDemo.c,v 41.11 2000/05/09 20:34:22 mlemos Exp $
  3.  *
  4.  * BGUI library
  5.  *
  6.  * (C) Copyright 2000 BGUI Developers Team.
  7.  * (C) Copyright 1998 Manuel Lemos.
  8.  * All Rights Reserved.
  9.  *
  10.  * $Log: BarDemo.c,v $
  11.  * Revision 41.11  2000/05/09 20:34:22  mlemos
  12.  * Bumped to revision 41.11
  13.  *
  14.  * Revision 1.2  2000/05/09 19:59:27  mlemos
  15.  * Merged with the branch Manuel_Lemos_fixes.
  16.  *
  17.  * Revision 1.1.2.1  2000/05/04 05:08:02  mlemos
  18.  * Initial revision.
  19.  *
  20.  *
  21.  */
  22.  
  23. #include <libraries/bgui.h>
  24. #include <libraries/bgui_macros.h>
  25.  
  26. #include <proto/exec.h>
  27. #include <proto/dos.h>
  28. #include <proto/intuition.h>
  29. #include <proto/bgui.h>
  30. #include <clib/alib_protos.h>
  31.  
  32. #include <bgui/bgui_bar.h>
  33.  
  34. /*
  35.  * Output file handle and BGUI
  36.  * library base.
  37.  */
  38. BPTR     StdOut;
  39. struct Library *BGUIBase;
  40.  
  41. /*
  42. ** Notification map-lists.
  43. **/
  44. ULONG pga2slh[] = { BAR_HorizontalPosition, BAR_HorizontalPosition, TAG_END };
  45. ULONG pga2slv[] = { BAR_VerticalPosition,   BAR_VerticalPosition,   TAG_END };
  46. ULONG sl2prg1[] = { BAR_HorizontalPosition, BAR_HorizontalSize,     TAG_END };
  47. ULONG prg12in[] = { BAR_HorizontalSize,     INDIC_Level,            TAG_END };
  48. ULONG sl2prg2[] = { BAR_VerticalPosition,   BAR_VerticalSize,       TAG_END };
  49. ULONG prg22in[] = { BAR_VerticalSize,       INDIC_Level,            TAG_END };
  50.  
  51. VOID Tell( UBYTE *fstr, ... )
  52. {
  53.    if ( StdOut ) VFPrintf( StdOut, fstr, ( ULONG * )&fstr + 1 );
  54. }
  55.  
  56. static Object *OpenMainWindow(struct MsgPort *SharedPort,struct Window **main)
  57. {
  58.    Object            *object=NULL, *p1, *p2, *s1, *s2, *p, *i1, *i2;
  59.  
  60.    /*
  61.    ** Not created yet? Create it now!
  62.    **/
  63.    if ( ! object ) {
  64.       object = WindowObject,
  65.          WINDOW_Title,     "BGUI Bar demo",
  66.          WINDOW_RMBTrap,         TRUE,
  67.          WINDOW_SmartRefresh, TRUE,
  68.          WINDOW_AutoAspect,   TRUE,
  69.          WINDOW_SharedPort,   SharedPort,
  70.          WINDOW_MasterGroup,
  71.             VGroupObject, NormalOffset, NormalSpacing,
  72.                StartMember,
  73.                   HGroupObject, NormalSpacing,
  74.                      StartMember,
  75.                         VGroupObject, NormalSpacing,
  76.                            StartMember, i1 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  77.                            StartMember,
  78.                              p1=BGUI_NewObject(BGUI_BAR_GADGET,
  79.                                  BAR_Horizontal,FALSE,
  80.                                  BAR_Vertical,FALSE,
  81.                                  BAR_HorizontalPosition,0,
  82.                                  BAR_HorizontalSize,0,
  83.                                  BAR_HorizontalTotal,100,
  84.                                  TAG_END),
  85.                            EndMember,
  86.                            StartMember,
  87.                               s1=BGUI_NewObject(BGUI_BAR_GADGET,
  88.                                   BAR_Horizontal,TRUE,
  89.                                   BAR_Vertical,FALSE,
  90.                                   BAR_HorizontalPosition,0,
  91.                                   BAR_HorizontalSize,1,
  92.                                   BAR_HorizontalTotal,101,
  93.                                   TAG_END),
  94.                               FixHeight( 16 ),
  95.                            EndMember,
  96.                         EndObject,
  97.                      EndMember,
  98.                      StartMember,
  99.                         p=BGUI_NewObject(BGUI_BAR_GADGET,
  100.                             BAR_Horizontal,TRUE,
  101.                             BAR_Vertical,TRUE,
  102.                             BAR_HorizontalPosition,0,
  103.                             BAR_HorizontalSize,1,
  104.                             BAR_HorizontalTotal,101,
  105.                             BAR_VerticalPosition,0,
  106.                             BAR_VerticalSize,1,
  107.                             BAR_VerticalTotal,101,
  108.                             TAG_END),
  109.                      EndMember,
  110.                      StartMember,
  111.                         s2=BGUI_NewObject(BGUI_BAR_GADGET,
  112.                             BAR_Horizontal,FALSE,
  113.                             BAR_Vertical,TRUE,
  114.                             BAR_VerticalPosition,0,
  115.                             BAR_VerticalSize,1,
  116.                             BAR_VerticalTotal,101,
  117.                             TAG_END),
  118.                         FixWidth( 16 ),
  119.                      EndMember,
  120.                      StartMember,
  121.                         VGroupObject, NormalSpacing,
  122.                            StartMember, i2 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  123.                            StartMember,
  124.                              p2=BGUI_NewObject(BGUI_BAR_GADGET,
  125.                                  BAR_Horizontal,FALSE,
  126.                                  BAR_Vertical,FALSE,
  127.                                  BAR_VerticalPosition,0,
  128.                                  BAR_VerticalSize,0,
  129.                                  BAR_VerticalTotal,100,
  130.                                  TAG_END),
  131.                            EndMember,
  132.                         EndObject,
  133.                      EndMember,
  134.                   EndObject,
  135.                EndMember,
  136.             EndObject,
  137.       EndObject;
  138.  
  139.       if ( object ) {
  140.          /*
  141.          ** Connect sliders, prop, progression and indicators.
  142.          **/
  143.          AddMap( s1, p1, sl2prg1 );
  144.          AddMap( s2, p2, sl2prg2 );
  145.          AddMap( p,  s1, pga2slh );
  146.          AddMap( p,  s2, pga2slv );
  147.          AddMap( p1, i1, prg12in );
  148.          AddMap( p2, i2, prg22in );
  149.       }
  150.    }
  151.  
  152.    /*
  153.    ** Object OK?
  154.    **/
  155.    if ( object ) {
  156.       /*
  157.       ** Open window.
  158.       **/
  159.       if((*main=WindowOpen( object ))==NULL)
  160.       {
  161.           DisposeObject(object);
  162.           object=NULL;
  163.       }
  164.    }
  165.  
  166.    return( object );
  167. }
  168.  
  169. static VOID StartDemo(void)
  170. {
  171.    Object         *WA_Main;
  172.    struct MsgPort *SharedPort;
  173.    ULONG       sigmask = 0L, sigrec,rc;
  174.    struct Window         *main=NULL, *sigwin;
  175.    BOOL        running = TRUE;
  176.  
  177.    /*
  178.    ** Create the shared message port.
  179.    **/
  180.    if ( SharedPort = CreateMsgPort()) {
  181.       /*
  182.       ** Open the main window.
  183.       **/
  184.       if ( WA_Main = OpenMainWindow(SharedPort,&main)) {
  185.          /*
  186.          ** OR signal masks.
  187.          **/
  188.          sigmask |= ( 1L << SharedPort->mp_SigBit );
  189.          /*
  190.          ** Loop...
  191.          **/
  192.          do {
  193.             /*
  194.             ** Wait for the signals to come.
  195.             **/
  196.             sigrec = Wait( sigmask );
  197.  
  198.             /*
  199.             ** Find out the which window signalled us.
  200.             **/
  201.             if ( sigrec & ( 1 << SharedPort->mp_SigBit )) {
  202.                while ( sigwin = GetSignalWindow( WA_Main )) {
  203.  
  204.                   /*
  205.                   ** Main window signal?
  206.                   **/
  207.                   if ( sigwin == main ) {
  208.                      /*
  209.                      ** Call the main-window event handler.
  210.                      **/
  211.                      while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
  212.                         switch ( rc ) {
  213.  
  214.                            case  WMHI_CLOSEWINDOW:
  215.                               running = FALSE;
  216.                               break;
  217.  
  218.                         }
  219.                      }
  220.                   }
  221.                }
  222.             }
  223.          } while ( running );
  224.       }
  225.       /*
  226.       ** Dispose of all window objects.
  227.       **/
  228.       if (WA_Main)   DisposeObject(WA_Main);
  229.       /*
  230.       ** Delete the shared message port.
  231.       **/
  232.       DeleteMsgPort( SharedPort );
  233.    } else
  234.       Tell( "Unable to create a message port.\n" );
  235. }
  236.  
  237. /*
  238.  * Main entry point.
  239.  */
  240. int main( int argc, char **argv )
  241. {
  242.    struct Process       *this_task = ( struct Process * )FindTask( NULL );
  243.    BOOL            is_wb = FALSE;
  244.  
  245.    if ( this_task->pr_CLI )
  246.       /*
  247.        * Started from the CLI. Simply pickup
  248.        * the CLI output handle.
  249.        */
  250.       StdOut = Output();
  251.    else {
  252.       /*
  253.        * Workbench startup. Open a console
  254.        * for output.
  255.        */
  256.       StdOut = Open( "CON:10/10/500/100/BGUI Demo Output/WAIT/AUTO", MODE_NEWFILE );
  257.       is_wb = TRUE;
  258.    }
  259.  
  260.    /*
  261.     * Open BGUI.
  262.     */
  263.    if ( BGUIBase = OpenLibrary( BGUINAME, BGUIVERSION )) {
  264.       /*
  265.        * Run the demo.
  266.        */
  267.       StartDemo();
  268.       CloseLibrary( BGUIBase );
  269.    } else
  270.       Tell( "Unable to open %s version %ld\n", BGUINAME, BGUIVERSION );
  271.  
  272.    /*
  273.     * Close console if ran from
  274.     * the workbench.
  275.     */
  276.    if ( is_wb ) {
  277.       if ( StdOut ) Close( StdOut );
  278.    }
  279.  
  280.    return( 0 );
  281. }
  282.  
  283.